package org.nobody.mallb2c.mallorder.web;

import org.nobody.mallb2c.mallorder.service.OrderService;
import org.nobody.mallb2c.mallorder.vo.OrderConfirmVo;
import org.nobody.mallb2c.mallorder.vo.OrderSubmitVo;
import org.nobody.mallb2c.mallorder.vo.SubmitOrderResponseVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.concurrent.ExecutionException;

/**
 * @author 3489309323@qq.com
 * @create 2020-09-21-20:11
 */
@Controller
public class OrderWebController {

  @Autowired
  OrderService orderService;

  @GetMapping("/toTrade")
  public String toTrade(Model model, HttpServletRequest request) throws ExecutionException, InterruptedException {
    OrderConfirmVo confirmVo = orderService.confirmOrder();

    model.addAttribute("orderConfirmData",confirmVo);

    return "confirm";
  }

  /**
   * 下单功能
   * @param vo
   * @return
   */
  @PostMapping("/submitOrder")
  public String submitOrder(OrderSubmitVo vo, Model model, RedirectAttributes redirectAttributes){
    //下单: 去创建订单, 验令牌, 验价格, 锁库存...
    SubmitOrderResponseVo responseVo = orderService.submitOrder(vo);
    if (responseVo.getCode() == 0) {
      //下单成功来到支付选择页
      model.addAttribute("submitOrderResp", responseVo);
      return "pay";
    }else{
      String msg = "下单失败：";
      switch (responseVo.getCode()) {
        case 1:
          msg += "令牌校验失败,订单信息过期,请刷新再次提交";
          break;
        case 2:
          msg += "订单商品价格发生变化,请再次确认后再次提交";
          break;
        case 3:
          msg += "商品库存不足,库存锁定失败";
          break;
        default:
          break;
      }
      redirectAttributes.addFlashAttribute("msg", msg);
      //下单失败回到订单确认页 重新确认订单信息
      return "redirect:http://order.mall.com/toTrade";
    }
  }
}
